package com.mazaiting.redeye.module.me

import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.view.Menu
import android.view.MenuItem
import androidx.constraintlayout.widget.ConstraintLayout
import cn.jpush.im.android.api.callback.GetAvatarBitmapCallback
import cn.jpush.im.android.api.model.UserInfo
import com.mazaiting.easy.app.IApplicationComponent
import com.mazaiting.easy.base.activity.BaseToolbarActivity
import com.mazaiting.log.L
import com.mazaiting.redeye.R
import com.mazaiting.widget.view.IteView
import kotlinx.android.synthetic.main.activity_user_info.*

/**
 * 用户信息页面
 */
class UserInfoActivity : BaseToolbarActivity<UserInfoPresenter>(), UserInfoContract.View {

    companion object {
        /**
         * 姓名键
         */
        private const val KEY_USER_INFO = "key_user_info"
        /**
         * 新实例
         * @param context 上下文
         */
        fun newInstance(context: Context, userInfo: UserInfo) {
            val intent = Intent(context, UserInfoActivity::class.java)
            intent.putExtra(KEY_USER_INFO, userInfo.toJson())
            context.startActivity(intent)
        }
    }

    /**
     * 用户信息
     */
    private var mUserInfo: UserInfo? = null

    override fun getContentLayout(): Int = R.layout.activity_user_info

    override fun inject(applicationComponent: IApplicationComponent?) {

    }

    override fun initData() {
        // 获取信息
        val info = intent.getStringExtra(KEY_USER_INFO)
        // 转换
        mUserInfo = UserInfo.fromJson(info)
        setUserInfo()
    }

    /**
     * 设置用户信息
     */
    private fun setUserInfo() {
        // 设置用户名
        ite_username.text = mUserInfo?.userName
        // 设置昵称
        ite_nickname.text = mUserInfo?.nickname
        // 设置签名
        ite_signature.text = mUserInfo?.signature
        initAvatar()
        setStatus()
    }

    /**
     * 初始化头像
     */
    private fun initAvatar() {
        // 设置图片大小
        val params = ConstraintLayout.LayoutParams(
            resources.getDimension(R.dimen.dp_20).toInt(),
            resources.getDimension(R.dimen.dp_20).toInt()
        )//两个400分别为添加图片的大小
        params.bottomToBottom = iti_avatar.bottom
        params.topToTop = iti_avatar.top
        params.rightToRight = iti_avatar.right
        params.marginEnd = resources.getDimension(R.dimen.dp_10).toInt()
        iti_avatar.ivContent.layoutParams = params
        // 设置头像
        if (null != mUserInfo) {
            mUserInfo!!.getAvatarBitmap(object : GetAvatarBitmapCallback() {
                override fun gotResult(code: Int, msg: String?, bitmap: Bitmap?) {
                    if (0 == code) {
                        iti_avatar.setRightBitmap(bitmap)
                    } else {
                        L.d("图片加载失败: $msg")
                    }
                }
            })
        } else {
            iti_avatar.ivContent.setImageDrawable(getDrawable(R.mipmap.ic_launcher))
        }
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        // 加载菜单
        menuInflater.inflate(R.menu.tool_user_info, menu)
        return true
    }

    /**
     * 标记是否修改
     */
    private var isModify = false

    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        when(item?.itemId) {
            R.id.menu_modify -> {
                // 取相反的状态
                isModify = !isModify
                // 是否修改
                if (isModify) {
                    item.title = getString(R.string.menu_competed)
                } else {
                    item.title = getString(R.string.menu_modify)
                }
                setStatus()
                return true
            }
        }

        return super.onOptionsItemSelected(item)
    }

    /**
     * 设置状态
     */
    private fun setStatus() {
        // 禁用修改用户名
        ite_username.isEnabled = false
        setEditTextStatus(ite_nickname)
        setEditTextStatus(ite_signature)
    }

    /**
     * 设置输入框状态
     * @param view 列表条目
     */
    private fun setEditTextStatus(view: IteView) {
        // 设置可用
        view.isEnabled = isModify
        // 设置光标位置
        view.setSelection(view.text.toString().length)
    }

}
